/*
 * Object3d.cpp
 *
 *      Author: grifos
 */

#include "CObject3d.h"

CObject3d::CObject3d(float x, float y, float z, float vitesse, std::string& name, float scale) {
	mX = x;
	mY = y;
	mZ = z;
	mVitesse = vitesse;
	mSelected = false;

	// On crée les noeud
	mBaseNode = new osg::MatrixTransform(); // noeud permettant de définir l'endroit ou se trouve l'objet
	mObjectRotation = new osg::MatrixTransform(); // noeud permettant de faire tourner l'objet
	mObjectScale = new osg::MatrixTransform();
	mObjectModel = osgDB::readNodeFile(name);



	// On place l'objet où on veut
	mBaseNode->setMatrix(osg::Matrix::translate(mX,mY,mZ));

	// On effectue le scaling
	mObjectScale->preMult(osg::Matrix::scale(scale,scale,scale));

	// On place les noeud comme il faut
	mBaseNode->addChild(mObjectScale.get());
	mObjectScale->addChild(mObjectRotation.get());

	// On oriente le modele comme on le souhaite
	osg::ref_ptr<osg::MatrixTransform> rot = new osg::MatrixTransform();
	rot->preMult(osg::Matrix::rotate(gmtl::Math::deg2Rad(-90.0f),1.0f,0.0f,0.0f));
	rot->addChild(mObjectModel.get());
	mObjectRotation->addChild(rot.get());


}


// Méthode qui update la rotation du cube
void CObject3d::update(float d)
{

	mObjectRotation->preMult( osg::Matrix::rotate( gmtl::Math::deg2Rad( mVitesse )*d, 0.0f, 1.0f, 0.0f) );
}

CObject3d::~CObject3d() {

}

void CObject3d::checkIntersect(osg::Vec3 wp)
{
	const osg::BoundingSphere& bound = mBaseNode->getBound();
	if(bound.contains(wp))
	{
		std::cout << "3D selected" << std::endl;
		mSelected = true;
	}
}

void CObject3d::setPosition(float x, float y, float z)
{
	mBaseNode->setMatrix(osg::Matrix::translate(x,y,z));
	mX = x;
	mY = y;
	mZ = z;
}
